﻿Ext.onReady(function(){
	Ext.QuickTips.init();
	Ext.form.Field.prototype.msgTarget = 'side';
	var btn;

	var urlAction = SiteUrl + '/admincpanel/admin-privilege/';
	var couldnot = 'Không thể kết nối đến server. Xin vui lòng thử lại sau!';

	var DataStore = new Ext.data.Store({
		id: 'DataStore',
		proxy: new Ext.data.HttpProxy({
			url: urlAction + 'action',
			method: 'POST'
		}),
		baseParams:{task: "LISTING"}, // Action
		reader: new Ext.data.JsonReader({
			root: 'results',
			totalProperty: 'total'
		},[
			{name: 'ID', type: 'int', mapping: 'id'},
			{name: 'Privilege', type: 'string', mapping: 'name'},
			{name: 'Group', type: 'string', mapping: 'group_name'},
			{name: 'Status', type: 'int', mapping: 'status'}
		]),
		remoteSort: false
	});
	
	var GroupDS = new Ext.data.Store({  
		proxy: new Ext.data.HttpProxy({  
			url: urlAction + 'action',
		}),
		autoload: false,
		baseParams:{ task: 'GROUPLIST'},
		reader: new Ext.data.JsonReader({  
			root: 'results'  
		},[ 
			{name: 'Value', type: 'int', mapping: 'id'},
			{name: 'Name', type: 'string', mapping: 'group_name'}	
		]),  
		remoteSort: false  
	});
	
	var PrivilegeDS = new Ext.data.Store({  
		proxy: new Ext.data.HttpProxy({  
			url: urlAction + 'action',
		}),
		autoload: false,
		baseParams:{ task: 'PLIST'},
		reader: new Ext.data.JsonReader({  
			root: 'results'  
		},[ 
			{name: 'Value', type: 'int', mapping: 'id'},
			{name: 'Name', type: 'string', mapping: 'name'}	
		]),  
		remoteSort: false  
	});
	
	var ColumnModel = new Ext.grid.ColumnModel( 
	[
	new Ext.grid.RowNumberer()
	,{
		header: '<b class=tieude> ID </b>',
		readOnly: true,
		dataIndex: 'ID',
		sortable: false,
		width: 60,        
		renderer: function(value, cell){ 
			return value;
		},
		hidden: true
	},{
		header: '<b class=tieude> Quyền hạn </b>',
		dataIndex: 'Privilege',
		id: 'Privilege',
		width: 350,
		sortable: false,
		renderer: function(value, cell){
			return value;
		}
	},{
		header: '<b class=tieude> Nhóm </b>',
		dataIndex: 'Group',
		width: 200,
		sortable: false,
		renderer: function(value, cell){
			return value;
		}
	},{
		header: '<b class=tieude> Published </b>',
		dataIndex: 'Status',
		width: 80,
		editor: new Ext.form.ComboBox({
			typeAhead: true,
			triggerAction: 'all',
			store:new Ext.data.SimpleStore({
				fields:['Value', 'Name'],
				data: [[1,'Có'],[0,'Không']]
			}),
			mode: 'local',
			displayField: 'Name',
			valueField: 'Value',
			lazyRender: true,
			editable: false,
			allowBlank: false,
			listClass: 'x-combo-list-small'
		}),
		renderer: function(value, cell){
			switch(value) {
				case 1: case '1': value = 'Có'; break;
				case 0: case '0': value = 'Không'; break;
			}
			return value;
		}
	}]);
	
	ColumnModel.defaultSortable = true;

	var ListingEditorGrid =  new Ext.grid.EditorGridPanel({
		id: 'ListingEditorGrid',
		autoExpandColumn: 'Privilege',
		store: DataStore,
		cm: ColumnModel,
		enableColLock:false,
		border: false,
		clicksToEdit:2,
		selModel: new Ext.grid.RowSelectionModel({singleSelect:false}),
		loadMask: {msg:'Đang tải dữ liệu, xin vui lòng đợi...'},
		bbar: new Ext.PagingToolbar({
			pageSize: 20,
			store: DataStore,
			displayInfo: true,
			displayMsg: 'Đang hiển thị từ {0} đến {1} trong {2} quyền hạn.',
			emptyMsg: "Hiện tại chưa có quyền nào cho nhóm thành viên...",
		}),
		tbar: [{
				text: 'Thêm',
				iconCls:'add',
				id: 'add',
				handler: displayFormWindow
			}, '-', { 
				text: 'Xóa',
				handler: confirmDelete,
				iconCls:'remove'
			},'-', {text: 'Lọc theo nhóm:'}, 
			new Ext.form.ComboBox({
				store: GroupDS,
				mode: 'remote',
				displayField: 'Name',
				allowBlank: true,
				editable: false,
				valueField: 'Value',
				anchor:'95%',
				triggerAction: 'all',
				listeners:{
					select:{
						fn: function(combo, value) {
							var group = combo.getValue();
							DataStore.load({params: {start: 0, limit: 20, group: group}});
						}
					}
				}
			})
		]
	});
	
	ListingEditorGrid.addListener('rowcontextmenu', onListingEditorGridContextMenu);   
    
	var ListingWindow = new Ext.Viewport({
		id: 'ListingWindow',
		plain: false,
		layout: 'fit',
		bodyStyle: 'padding:5px',
		items: [ListingEditorGrid]
	});
    
	DataStore.load({params: {start: 0, limit: 20}});
	ListingWindow.show();
	ListingEditorGrid.on('afteredit', saveEntry);
  
	var Privilege = new Ext.form.ComboBox({
		id:'Privilege',
		fieldLabel: 'Quyền hạn',
		store: PrivilegeDS,
		mode: 'remote',
		displayField: 'Name',
		allowBlank: false,
		editable: false,
		valueField: 'Value',
		anchor:'95%',
		triggerAction: 'all'
	});
	
	var UsrGroup = new Ext.form.ComboBox({
		id:'UsrGroup',
		fieldLabel: 'Nhóm thành viên',
		store: GroupDS,
		mode: 'remote',
		displayField: 'Name',
		allowBlank: false,
		editable: false,
		valueField: 'Value',
		anchor:'95%',
		triggerAction: 'all'
	});
	
	var CreateForm = new Ext.FormPanel({
		labelAlign: 'top',
		bodyStyle: 'padding:5px 0 5px 5px;',
		items: [{
			layout: 'column',
			border: false,
			items: [{
				columnWidth: 0.5,
				layout: 'form',
				border: false,
				items: [Privilege]
			},{
				columnWidth: 0.5,
				layout: 'form',
				border: false,
				items: [UsrGroup]
			}]
		}],
		buttons: [{
			text: 'Save and Close',
			handler: createEntry
			},{
			text: 'Cancel',
			handler: function(){
				CreateWindow.hide();
			}
		}],

		keys: {
			key: 27, // Esc key
			handler: function(){ CreateWindow.hide(); },
			scope: this
		}
	});
  
	var CreateWindow= new Ext.Window({
		id: 'CreateWindow',
		title: 'Thêm quyền cho nhóm:',
		closable: false,
		draggable: false,
		width: 810,
		height: 125,
		modal: true,
		plain: true,
		layout: 'fit',
		resizable: false,
		animateTarget: "add",
		items: CreateForm
	});
	
	// Update
	function saveEntry(oGrid_event){
		Ext.Ajax.request({
			url: urlAction + 'edit',
			params: {
				task: "UPDATEPRES",
				id: oGrid_event.record.data.ID,
				fullname: oGrid_event.record.data.UsrFullName,
				email: oGrid_event.record.data.UsrEmail,
				group: oGrid_event.record.data.UsrGroup,
				status: oGrid_event.record.data.UsrStatus
			}, 
			success: function(response){              
				var result = response.responseText;
				switch(result){
					case 'ok':
						Ext.TipOK.msg('Success:', 'Cập nhật dữ liệu thành công!');
						break;
					case 'exist':
						Ext.TipOK.msg('Warning:', 'Username hoặc Email đã tồn tại, xin vui lòng kiểm tra lại.');
						break;
					case 'invalidemail':
						Ext.TipOK.msg('Warning:', 'Định dạng email không chính xác.');
						break;
					case 'required':
						Ext.TipOK.msg('Warning:', 'Dữ liệu trong form không được để trống...');
						break;
				}
				DataStore.commitChanges();
				DataStore.reload();
			},
			failure: function(response){
				var result = response.responseText;
				Ext.MessageBox.alert('&nbsp; Warning:', result);    
			}                      
		});   
	}

	function isFormValid(){
		return (CreateForm.getForm().isValid());
	}
	
	// Them danh muc
	function createEntry(){
		if(isFormValid()) {
			Ext.Ajax.request({
				url: urlAction + 'add',
				params: {
					task: "CREATEPRES",
					fullname: FullName.getValue(),
					usrname: UsrName.getValue(),
					usremail: UsrEmail.getValue(),
					usrgroup: UsrGroup.getValue()
				}, 
				success: function(response){              
					var result = response.responseText;
					//Ext.TipOK.msg('Success:', result);
					switch(result){
						case 'ok':
							Ext.TipOK.msg('Success:', 'Thêm dữ liệu thành công!');
							DataStore.reload();
							CreateWindow.hide();
							break;
						case 'exist':
							Ext.TipOK.msg('Warning:', 'Username hoặc Email đã tồn tại, xin vui lòng kiểm tra lại.');
							break;
						case 'invalidemail':
							Ext.TipOK.msg('Warning:', 'Định dạng email không chính xác.');
							break;
						case 'required':
							Ext.TipOK.msg('Warning:', 'Dữ liệu trong form không được để trống...');
							break;
						case 'couldnot':
							Ext.TipOK.msg('Warning:', couldnot);
							break;
					}        
				},
				failure: function(response){
					var result = response.responseText;
					Ext.MessageBox.alert('&nbsp; Warning:', result);         
				}                      
			});
		}
	}
  
	function resetForm(){
		CreateForm.getForm().reset();
	}
  
	function displayFormWindow(){
		if (!CreateWindow.isVisible()){
			resetForm();
			CreateWindow.show();
		} else {
			CreateWindow.toFront();
		}
	}
  
  	function confirmDelete(){
		if (ListingEditorGrid.selModel.getCount() == 1)
		{
			Ext.MessageBox.confirm('&nbsp; Xin vui lòng cẩn thận:','Bạn có thực sự muốn xóa quyền này không???', deleteSelections);
		} else if(ListingEditorGrid.selModel.getCount() > 1){
			Ext.MessageBox.confirm('&nbsp; Xin vui lòng cẩn thận:','Bạn có thực sự muốn xóa những quyền này không???', deleteSelections);
		} else {
			Ext.TipOK.msg('Thông báo:', 'Bạn không thể xóa khi chưa chọn dữ liệu...');
		}
	}  
  
	function deleteSelections(btn){
		if (btn=='yes'){
			var selections = ListingEditorGrid.selModel.getSelections();
			var prez = [];
			for(i = 0; i< ListingEditorGrid.selModel.getCount(); i++){
				prez.push(selections[i].json.id);
			}
			var encoded_array = Ext.encode(prez);
			Ext.Ajax.request({  
				url: urlAction + 'del', 
				params: { 
					task: "DELETEPRES", 
					ids:  encoded_array
				}, 
				success: function(response){
					var result = response.responseText;
					switch(result){
						case 'ok':
							Ext.TipOK.msg('Success:', 'Xóa thành công!');
							DataStore.reload();
							break;
						case 'no':
							Ext.TipOK.msg('Warning:', 'Bạn không thể xóa được nhóm thành viên này!');
							break;
						default:
							Ext.TipOK.msg('Warning:', result);
							break;
					}
				},
				failure: function(response){
					var result = response.responseText;
					Ext.MessageBox.alert('&nbsp; Warning:', result);      
				}
			});
		}  
	}
	
	function onListingEditorGridContextMenu(grid, rowIndex, e) {
		e.stopEvent();
	}
});
